#include <stdio.h>
#include <stdlib.h>

/*
 * 通过指针变量修改值
 * */
static void modifyVar(int* p)
{
	// 此处指针变量对应的地址和外部的取到的指针地址相同
	printf("In modifyVar *p = %p\n",p);
	*p = 300;
}

static void exchange(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
int main()
{

	int i = 100;

	printf("i =  %d\n",i);
	// &i 	 表示取址操作，是内存在所在的位置
	printf("i =  %p\n",&i);
	// *(&i) 表示取值操作，取到的是指针（地址）对应 的值	
	printf("i =  %d\n",*(&i));
	// 指针（地址）变量，指针存放（指向）的就是变量的地址
	// int*  表示int类型的指针（地址）
	int *p = &i;
	printf("i =  %d\n",*p);
	// 通过指针变量修改值，此处 *p 表示 表示 i，i=200
	*p = 200;	
	printf("i =  %d\n",i);
	modifyVar(&i);
	printf("i =  %d\n",i);

	printf("------------------\n");

	printf("int 类型占用字节数：%ld\n",sizeof(int));
	printf("double 类型占用字节数：%ld\n",sizeof(double));
	printf("float 类型占用字节数：%ld\n",sizeof(float));
	printf("char 类型占用字节数：%ld\n",sizeof(char));

	printf("------------------\n");
	
	int a = 80;
	int b = 90;
	printf("a = %d, b = %d \n",a,b);
	exchange(&a,&b);
	printf("a = %d, b = %d \n",a,b);

	exit(0);
}

